查看原文
其他

干货 | 权益证明 FAQ:Part-2

2018-03-18 Community 以太坊爱好者


何为“弱主观性”?


务必要注意,利用保证金确保“权益成本不为零”的机制确实改变了安全模型。假设保证金被锁定了4个月,而且之后可被取出。假设有人发起了一次51%攻击,10天内的交易都被重置。 由攻击者创造的区块可以作为不当行为证明(或是"dunkles")被导入到主链之中,验证者可以得到惩罚。然而,假设该攻击是在6个月之后发生的,那么即使这些区块肯定可以重新导入,但那时该恶意的验证者也能从主链上取回他们保证金,而不会遭受惩罚。


为了解决这一问题,我们引入了“区块回滚限制(revert limit)”——其规则是节点必须拒绝回滚比保证金被锁定时间更久的区块(按照上例来说就是4个月)。


要注意的是这一规则不同于协议内的其它共识规则,因为这意味着节点可能会基于它们看到某些消息的时间而得出不同的结论。不同的节点看到某个信息的时间各有差异;因此我们认为这一规则是“主观的”(或者,熟知拜占庭容错理论的人可能会将其视为一种同步假设)。然而,此处所说的“主观性”是很弱的:为了让节点继续加入“错误”链,收到原始信息的时间必须晚4个月。只有两种可能性:


  1. 当一个节点第一次连接到区块链上之时。

  2. 如果一个节点已经离线4个月以上。


我们可以通过要求用户验证链外最新状态来解决第一个问题。用户可以通过询问他们的朋友、区块浏览器,以及有过互动的企业等,在这条链上找到最近一个他们所认为的合法区块哈希值。实际上,这个区块哈希值很可能只是他们用来验证这条区块链的软件的一部分;能够破坏软件中检验点的攻击者按理说也可以轻易破坏软件本身,即使再多的纯加密经济验证也不能解决这一问题。


要注意的是,只有当之前的利益相关者中的大多数联合起来攻击网络并创建另一条区块链来取而代之这种非常有限的情况下,上述这些才会成为问题;我们认为大多数时候仅有一条合法链可供选择。


还要注意的是,如果链上出现任何硬分叉,弱主观性设想也存在于基于工作量证明的区块链中。比特币已经通过 bitcoind 0.8.1 提前两个月完成了硬分叉,修复了让几类大区块失效的数据库问题,因而能让客户端处理 bitcoind 0.7 所无法处理的区块,为此必须提前两个月通知用户下载新版本的软件。这本身就是一种弱主观性设想,因为用户必须在这两个月期间“登录”并下载更新包,以便继续留在正确的链上。


此外,根据需要,社交验证可以通过几种途径实现自动化。一种是将其转化为自然的用户工作流程:BIP 70型付款申请可以包含最近的区块哈希值,而用户的客户端软件会在付款申请通过之前(或者进行任何链上交互之前)确保他们与卖方处在同一条链上。另一种是使用 Jeff Coleman 提出的通用哈希时间(Universal Hash Time)。如果使用了该方案后,攻击链要想成功的话,就要在创建正当链的同时秘密生成,这就需要大多数验证者在这段时间内保持秘密共谋的状态。



弱主观性是否意味着权益证明链必须与工作量证明链“锚定”才能保证安全性?


简单来说,并不是。


展开讲讲?


在实践中,弱主观性本身是区块链安全性假设的一个很小的附加部分,并且绝对不需要基于工作量证明的外部来源信任来支持。要想知道为什么,考虑一种情况:弱主观性本身将降低区块链(系统)的安全性。在那样的世界里,强大的公司或者国家节点将有能力通过某种方式使得全社区相信区块哈希值 B 是区块 XXXYYY 的区块哈希值,即便当他们中的大多数看见并且将信息存储进他们自己的电脑中时,存储信息为:区块 XXXYYY 的区块哈希值为 A。但是出于某种原因,这种强大的节点不会有能力诱骗用户接收来自他们与下载客户端软件不同位置的信息。


此外,提倡的这种 “锚定” 机制,甚至都不安全。所有锚定证明了一个给定区块的 产生 时间 T' < T;但并没有证明该区块在那个时刻发布。因此,一个与 PoW 链锚定的 PoS 链能够被并行“开采”两条链的多数联盟轻易攻击:两个锚定,先发布一个,四个月之后再发布另一个。


为了避免这种情况,可以通过将一个 PoS 链的全功能 “轻客户端” 嵌入 PoW 链,这将拒绝“双-锚定”(攻击),但是这就要求 PoW 链必须具备足够的功能来实现该客户端(即,全功能的 PoS “轻客户端”),但目前现有 PoW 链都没有这种能力。



在权益证明中能够在经济上惩罚审查制么?


与回滚不同,审查证实起来更加困难。区块链本身不能直接分辨出“用户 A 尝试发送交易 X 但它被不公平地删掉了” ,“用户 A 尝试发送交易 X,但因为交易费不够而始终没有被打包到区块中” 和 “用户 A 从未发送交易 X” 三者之间的不同。还好,还有一些技术能让我们缓解审查问题。


第一,利用停机问题来抵御审查。在该方案的一个较弱的版本中,协议被设计为图灵完备的,这使得验证者甚至不能在不花费大量的算力执行该交易的情况下,判断该给定交易是否会导致意料之外的操作,从而会面临拒绝服务(DoS)攻击。这也是避免 DAO 软分叉的原因。


在该方案的一个较强的版本中,交易能够在临近中期的某个时刻触发固定的效果。因此,用户可以发送相互影响多笔交易,和预测的第三方信息一起触发未来的某个事件,但验证者无法判断将要发生什么,等到交易已经被打包进区块链(且经济上确认),验证者想再阻止(事情发生)的时候就已经晚了;即使所有未来的相关交易都被剔除,验证者想要阻止的事情依旧会发生。该方案中需要注意的是,验证者依旧会尝试阻止所有交易,也许会尝试阻止所有没有包含能证明自己不会损坏系统证据的交易,但这意味着需要禁止非常大范围的交易,最终达到破坏整个系统的目的,这也造成验证者失去一部分资产(即,加密数字货币的价格会降低),他们的存款的价值也将会下降。


第二,由 Adam Back 在这里提出的,要求交易通过时间锁加密。因此,验证者将在不知道交易内容的情况下打包交易,并且交易只有在(被打包)之后内容才会自动显示,而此时再选择不打包该交易为时已晚。然而,如果验证者是足够恶意,他们能够仅包含拥有某种解密版本加密证明的交易(例如:ZK-SNARK);这将迫使用户下载新的(可解密的)客户端软件,但是攻击者很容易就能提供类似客户端软件方便下载。在博弈论模型中,用户是有动机配合的。


也许在权益证明背景下,最好的说法是,用户也可以通过安装包含硬分叉的软件更新来删除恶意验证者,这并不比安装一个软件更新使得他们的交易 “易于审查” 困难得多。因此,总之该方案还是有一定效果的,尽管它的代价是降低区块链交互性(注意!该方案必须是强制的才能生效;否则恶意验证者只需轻易地过滤加密交易而保留更快的非加密交易)。


第三种方案是将审查识别包含在分叉选择规则中。这个想法很简单。节点监视网络中的交易,如果他们观察到一笔交易在足够长的时间内包含足够高的费用,他们就会为不包含该交易的区块链打一个 “低分”。如果所有节点均遵循该策略,那么最终,包含了该区块的少数链会自动合并,所有诚实在线节点都将在其后挖矿。该方案最主要的缺点是离线节点仍将在主分叉后挖矿,且如果审查是临时的,离线节点又在审查结束后重新登录,那么这些离线节点会与之前的在线节点落到网络中不同的分支上。因此,该方案应该被看做是一种发生硬分叉时自动紧急处理的工具,其并不能在日常分叉地处理中发挥积极作用。



原文链接: https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ
作者: Maintained by Community
翻译&校对: 闵敏、林鹏 & Elisa




你可能还会喜欢:

Proof of Stake-股权证明 系列2
干货 | 共识算法的比较:Casper vs Tendermint
Casper机制的历史起源—第一篇



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存